package cn.tedu.ceb.base.utils;

import java.math.BigInteger;
import java.security.MessageDigest;

public class Md5Utils {

    //接受一个字符串参数 password，并返回其MD5哈希值。
    public static String md5(String password) {
        try {
            //获取一个MessageDigestMD5摘要算法实例对象，用于计算MD5哈希值
            MessageDigest md = MessageDigest.getInstance("MD5");
            //将输入字符串转换为字节数组，并通过 digest 方法计算出摘要。
            byte[] messageDigest = md.digest(password.getBytes());
            //使用 BigInteger 构造函数将字节数组转换为一个正数的大整数。参数 1 表示字节数组是正数。
            BigInteger number = new BigInteger(1, messageDigest);
            //将大整数转换为十六进制字符串。
            String md5 = number.toString(16);
            //如果十六进制字符串的长度小于 32 个字符，则在前面补 0。MD5哈希值应该是32位的十六进制字符串。如果长度不足32位，则在前面补零直到达到正确的长度。
            while (md5.length() < 32){
                md5 = "0" + md5;
            }
            return md5;
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}
